export class MathUtil {
    public static random(min: number, max: number): number {
        return Math.floor(Math.random() * (max - min)) + min;
    }

    public static randomMax(max: number): number {
        return Math.floor(Math.random() * (max));
    }

    public static randomArray<T>(array: T[]): T {
        if (!array) return null;
        const i = MathUtil.random(0, array.length);
        return array[i];
    }

    /**
     * 从枚举类型中随机选择一项
     * @param enumObj 枚举对象
     * @returns 随机枚举项的值
     */
    static getRandomEnumValue<T>(enumObj: T): T[keyof T] {
        const enumValues = Object.keys(enumObj)
            .filter(key => isNaN(Number(key))) // 过滤掉数字枚举的反向映射
            .map(key => enumObj[key as keyof T]);
        const randomIndex = Math.floor(Math.random() * enumValues.length);
        return enumValues[randomIndex];
    }
}

